home *** CD-ROM | disk | FTP | other *** search
-
- /* Copyright (C) 1988, 1989 Herve' Touati, Aquarius Project, UC Berkeley */
-
- /*
- * using set and access as rudimentary garbage collection
- * assert ---> for set
- * retract ---> for access
- */
-
- main :-
- list1(X),
- qsort(X,Y),
- set(Y),
- fail.
- main :-
- access(Y),
- write(Y), nl.
-
- qsort([],[]) :- !.
- qsort([A|As], B) :-
- filter(A, As, Smaller, Greater),
- qsort(Smaller, SmallerSorted),
- qsort(Greater, GreaterSorted),
- append(SmallerSorted, [A|GreaterSorted], B).
-
- filter(A,[],[],[]) :- !.
- filter(A, [B|Bs], [B|Cs], Ds) :-
- A > B,
- filter(A, Bs, Cs, Ds).
- filter(A, [B|Bs], Cs, [B|Ds]) :-
- A =< B,
- filter(A, Bs, Cs, Ds).
-
- append([], X, X) :- !.
- append([X|Xs], Y, [X|Zs]) :-
- append(Xs, Y, Zs).
-
- list1([3,8,4,0,45,23,3,8,4,0,45,23,3,8,4,0,45,23,3,8,4,0,45,23,3,8,4,0,45,23,3,8,4,0,45,23,3,8,4,0,45,23,3,8,4,0,45,23,98]).
-
-
- access(N) :- access(0,N).
- set(N) :- set(0,N).
-
-